﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using Microsoft.Reporting.WebForms;
using System.Collections.Specialized;

public partial class genDistritoListar : ObjectPage
{

    #region CONSTANTES

    protected const string REPORTE_RUTA = "/Reports/GALEXITO_main/repDistrito";
    protected const string EDITAR_RUTA = "~/gen/genDistritoEditar.aspx";

    #endregion

    #region PROPIEDADES

    protected int NumeroPagina = 0;

    #endregion PROPIEDADES

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuListarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {
            Cargar();
            Listar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Buscar":
                ucpagLista.NumeroPagina = 1;
                Listar();
                break;
            case "Nuevo":
                Nuevo();
                break;
            case "Exportar":
                Exportar();
                break;
            case "Imprimir":
                Imprimir();
                break;
        }
    }

    protected void ucpagLista_CambioPagina(object sender, EventArgs e)
    {
        Listar();
    }

    protected void lvLista_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        string strIdModelo = e.CommandArgument.ToString();
        switch (e.CommandName)
        {
            case "Editar":
                Editar(strIdModelo);
                break;
            case "Eliminar":
                Eliminar(strIdModelo);
                break;
        }
    }

    protected void lvLista_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        ImageButton ibt;
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            ibt = (ImageButton)e.Item.FindControl("ibtEliminar");
            Label lb = (Label)e.Item.FindControl("lblEstado");
            if (((Label)e.Item.FindControl("lblEstado")).Text == Constantes.ESTADO_ACTIVO_DESC)
            {
                ibt.ImageUrl = Constantes.ESTADO_ACTIVO_URL;
                ibt.ToolTip = Resources.resDiccionario.Inactivar;
            }
            else
            {
                ibt.ImageUrl = Constantes.ESTADO_INACTIVO_URL;
                ibt.ToolTip = Resources.resDiccionario.Activo;
            }
        }
    }

    protected void ddlPais_SelectedIndexChanged(object sender, EventArgs e)
    {
        CargarDepartamento();
    }

    protected void ddlDepartamento_SelectedIndexChanged(object sender, EventArgs e)
    {
        CargarProvincia();
    }

    #endregion

    #region METODOS

    protected void Cargar()
    {
        ucpagLista.NumeroPagina = 1;
        ddlEstado.SelectedIndex = 0; //Estado Activo
        txtDescripcion.Text = string.Empty;
        txtCodigoRTPS.Text = string.Empty;
        //Cargar Estado 
        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");
        //Cargar Pais
        Util.loadComboAndItem(ddlPais, ListarPais(), "Descripcion", "IdPais", string.Format("--{0}--",Resources.resDiccionario.Todos), "0");
        //Cargar Departamento
        CargarDepartamento();
        CargarProvincia();
        //Configura Parametros
        ConfiguraParametros();
    }

    /// <summary>
    /// Carga los Departamento del Pais seleccionado
    /// </summary>
    private void CargarDepartamento()
    {
        int intIdPais = 0;
        int.TryParse(ddlPais.SelectedValue, out intIdPais);
        Util.loadComboAndItem(ddlDepartamento, ListarDepartamentos(intIdPais), "Descripcion", "IdDepartamento", string.Format("--{0}--", Resources.resDiccionario.Todos), "0");
    }

    /// <summary>
    /// Carga los Departamento del Pais seleccionado
    /// </summary>
    private void CargarProvincia()
    {
        int intIdDepartamento = 0;
        int.TryParse(ddlDepartamento.SelectedValue, out intIdDepartamento);
        Util.loadComboAndItem(ddlProvincia, ListarProvincias(intIdDepartamento), "Descripcion", "IdProvincia", string.Format("--{0}--", Resources.resDiccionario.Todos), "0");
    }


    /// <summary>
    /// Método Lista
    /// </summary>
    /// <returns></returns>
    protected void Listar()
    {
        int intTotalFilas = 0, intFilasXPagina = 0;
        string strDescripcion = string.Empty, 
            strEstado = string.Empty, 
            strTipoLista = string.Empty,
            strIdPais = string.Empty, 
            strIdDepartamento = string.Empty, 
            strCodigoDistrito = string.Empty, 
            strCodigoRTPS = string.Empty,
            strIdProvincia = string.Empty;

        strDescripcion = txtDescripcion.Text.Trim();
        strCodigoRTPS = txtCodigoRTPS.Text.Trim();

        strIdPais = ddlPais.SelectedValue;
        strIdDepartamento = ddlDepartamento.SelectedValue;
        strIdProvincia = ddlProvincia.SelectedValue;
        strEstado = ddlEstado.SelectedValue;
        int inNumeroPagina = NumeroPagina.Equals(0) ? ucpagLista.NumeroPagina : NumeroPagina;    
        //Validar

        //Filtrar
        DataTable dt = ListarDistrito(strIdPais, strIdDepartamento, strIdProvincia, strCodigoDistrito, strCodigoRTPS, strDescripcion, ddlEstado.SelectedValue, inNumeroPagina);
        lvLista.DataSource = dt;
        lvLista.DataBind();
        if (dt.Rows.Count > 0)
        {
            intFilasXPagina = Convert.ToInt32(dt.Rows[0]["FilasXPagina"]);
            intTotalFilas = Convert.ToInt32(dt.Rows[0]["TotalFilas"]);
        }
        ucpagLista.TotalRegistros = intTotalFilas;
        ucpagLista.RegistrosPorPagina = intFilasXPagina;
        ucpagLista.EnlazarPaginador();
        ucpagLista.NumeroPagina = inNumeroPagina;
    }

    protected void Nuevo()
    {
        string strCadena = "?a=n";
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Editar(string strId)
    {
        string strCadena = string.Format("?a=e&i={0}&param1={1}", strId, ObtenerFiltroParametro());
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Eliminar(string strId)
    {
        string strCadena = string.Format("?a=d&i={0}&param1={1}", strId, ObtenerFiltroParametro());
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Exportar()
    {
        UtilExcel ut = new UtilExcel();
        DataTable dt = ListarDistrito(ddlPais.SelectedValue, ddlDepartamento.SelectedValue, ddlProvincia.SelectedValue, string.Empty, txtCodigoRTPS.Text.Trim(), txtDescripcion.Text.Trim(), ddlEstado.SelectedValue, 0);
        dt.Columns.Remove("FilasXPagina");
        dt.Columns.Remove("TotalFilas");
        ut.ExportaAExcelHoja(dt, Resources.resDiccionario.Archivo, Resources.resDiccionario.Datos);
    }

    protected void Imprimir()
    {
        Util.ejecutaScriptAJAX(this.Page, string.Format("window.open('../rep/repPreview.aspx');"));
    }

    private string ObtenerFiltroParametro()
    {
        return string.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}", ucpagLista.NumeroPagina.ToString(), ddlPais.SelectedValue, ddlDepartamento.SelectedValue, ddlProvincia.SelectedValue, txtCodigoRTPS.Text, txtDescripcion.Text, ddlEstado.SelectedValue);
    }

    void ConfiguraParametros()
    {
        string strParam = HttpUtility.UrlDecode(Request.QueryString["param1"]);
        if (!string.IsNullOrEmpty(strParam))
        {
            string[] strFiltros = strParam.Split('|');
            NumeroPagina = int.Parse(strFiltros[0]);
            Util.SelectCombo(ddlPais, strFiltros[1]);
            CargarDepartamento();
            Util.SelectCombo(ddlDepartamento, strFiltros[2]);
            CargarProvincia();
            Util.SelectCombo(ddlProvincia, strFiltros[3]);
            txtCodigoRTPS.Text = strFiltros[4];
            txtDescripcion.Text = strFiltros[5];
            Util.SelectCombo(ddlEstado, strFiltros[6]);
        }
    }

    #endregion

    #region WEBSERVICES

    /// <summary>
    /// Método Lista Niveles de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected DataTable ListarDistrito(string pstrIdPais, string pstrIdDepartamento, string pstrIdProvincia, string pstrCodigoDistrito, string pstrCodigoRTPS, string pstrDescripcion, string pstrEstado, int pintPagina)
    {
        WCDistrito.BEDistrito be = new WCDistrito.BEDistrito();
        be.IdPais = int.Parse(pstrIdPais);
        be.IdDepartamento = int.Parse(pstrIdDepartamento);
        be.IdProvincia = int.Parse(pstrIdProvincia);
        be.CodigoDistrito = pstrCodigoDistrito;
        be.CodigoRTPS = pstrCodigoRTPS;
        be.Descripcion = pstrDescripcion;
        be.Estado = pstrEstado;
        be.Pagina = pintPagina;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCDistrito.IWCDistrito>("BasicHttpBinding_IWCDistrito"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.Listar(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }


    /// <summary>
    /// Método Lista Datos de ParametroDetalle
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    //<summary>
    //Método Lista Datos de Departamentos por Pais
    //</summary>
    //<returns>Devuelve un dataTable</returns>
    protected DataTable ListarProvincias(int pintIdDepartamento)
    {
        WCProvincia.BEProvincia be = new WCProvincia.BEProvincia();
        be.IdDepartamento = pintIdDepartamento;
        be.Estado = Constantes.ESTADO_ACTIVO;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCProvincia.IWCProvincia>("BasicHttpBinding_IWCProvincia"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.ListarPorDepartamento(be).Tables[0]);
            dt = response;
        }
        return dt;
    }



    //<summary>
    //Método Lista Datos de Departamentos por Pais
    //</summary>
    //<returns>Devuelve un dataTable</returns>
    protected DataTable ListarDepartamentos(int pintIdPais)
    {

        WCDepartamento.BEDepartamento be = new WCDepartamento.BEDepartamento();
        be.IdPais = pintIdPais;
        be.CodigoDepartamento = string.Empty;
        be.CodigoRTPS = string.Empty;
        be.Descripcion = string.Empty;
        be.Estado = Constantes.ESTADO_ACTIVO;

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCDepartamento.IWCDepartamento>("BasicHttpBinding_IWCDepartamento"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.ListarPorPais(be).Tables[0]);
            dt = response;
        }
        return dt;
    }


    /// <summary>
    /// Método Lista Datos de Pais
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarPais()
    {

        WCPais.BEPais be = new WCPais.BEPais();
        be.Estado = "A";

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCPais.IWCPais>("BasicHttpBinding_IWCPais"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar_Sel(be).Tables[0]);
            dt = response;
        }
        return dt;
    }


    #endregion

  
}